﻿using System.IO;
using Core.Reader;
using Core.Writer;

namespace Core.Formats
{
    /// <summary>
    /// 格式化器接口。
    /// 实现格式化器必须支持对以下基础对象格式。
    /// Boolean, Byte, SByte, Short, UShort, Int32, UInt32, Int64, UInt64, Float, Double, String, DateTime, Decimal, Guid, Time, TimeSpan, DBNull, Null
    /// 在解析时当值为 IDataReader 对象时需以对应的类型解析该值，需要支持嵌套。
    /// </summary>
    public interface IDocumentFormat
    {
        /// <summary>
        /// 编码对象到文本
        /// </summary>
        /// <param name="Reader">对象</param>
        /// <param name="Writer">文本写入器</param>
        void Encode(IDataReader Reader, TextWriter Writer);

        /// <summary>
        /// 解析文本到对象
        /// </summary>
        /// <param name="Text">文本</param>
        /// <param name="Writer">对象写入器</param>
        void Decode(string Text, IDataWriter Writer);

        /// <summary>
        /// 将文本解析为 .Net 对象
        /// </summary>
        /// <param name="Text">文本</param>
        /// <returns>返回 .Net 对象</returns>
        object ParseValue(string Text);

        /// <summary>
        /// 获得 .Net 对象的文本表现形式
        /// </summary>
        /// <param name="Value">.Net 对象</param>
        /// <returns>返回文本表现形式</returns>
        string GetString(object Value);
    }
}